home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -serious- / programming / other / tandem / teaching / 52.asm < prev    next >
Assembly Source File  |  1999-09-06  |  2KB  |  96 lines

  1. * 52.asm  demonstrate TLGetilbm     version 0.01     2.3.98
  2.  
  3.  
  4.  include 'Front.i'
  5.  
  6.  
  7. strings: dc.b 0
  8. st_1: dc.b 'Demonstrate TLgetilbm',0 ;1
  9.  dc.b 'Filename of ILBM IFF file',0 ;2
  10.  ds.w 0
  11.  
  12.  
  13. fil: ds.b 34               ;ilbm fil, dir
  14. dir: ds.b 130
  15. bmhd: ds.l 1               ;buffer for bmhd data
  16. bmap: ds.l 1               ;bitmap created by TLgetilbm call
  17. rprt: ds.l 1               ;rastport used to hold bmap for ClipBlit
  18.  
  19.  
  20. *>>>> demonstrate  TLGetilbm
  21. Program:
  22.  TLwindow #-1
  23.  TLwindow #0,#0,#0,#640,xxp_Height(a4),#640,xxp_Height(a4),#0,#st_1
  24.  beq Pr_bad
  25.  TLpublic #790
  26.  move.l d0,bmhd            ;mem for bmhd
  27.  beq Pr_bad
  28.  TLpublic #rp_SIZEOF
  29.  move.l d0,rprt            ;mem for rport
  30.  beq Pr_bad
  31.  clr.b fil                 ;init fil,dir
  32.  clr.b dir
  33.  
  34. Pr_cyc:                    ;view next picture
  35.  TLreqcls
  36.  TLaslfile #fil,#dir,#2,ld ;get filename of ilbm
  37.  beq Pr_bad                ;bad if can't
  38.  
  39.  TLgetilbm #2,bmhd         ;load ilbm into bmap
  40.  beq Pr_bad                ;bad if can't
  41.  move.l a0,bmap            ;save bmap address
  42.  
  43.  bsr Blit                  ;blit the ilbm from the bitmap to the window
  44.  TLfreebmap bmap           ;free the bitmap
  45.  
  46.  TLkeyboard                ;wait for acknowledge
  47.  cmp.b #$93,d0
  48.  bne Pr_cyc                ;recycle unless close window
  49.  bra.s Pr_done
  50.  
  51. Pr_bad:                    ;report error if bad
  52.  TLerror
  53.  TLreqchoose
  54.  
  55. Pr_done:                   ;quit
  56.  rts
  57.  
  58.  
  59. *>>>> blit the ilbm from bmap to window 0
  60. Blit:
  61.  move.l xxp_gfxb(a4),a6    ;initialise rastport
  62.  move.l rprt,a1
  63.  jsr _LVOInitRastPort(a6)
  64.  move.l rprt,a0            ;a0 = rprt
  65.  move.l bmap,a2            ;a2 = bmap, attach to rport
  66.  move.l a2,rp_BitMap(a0)
  67.  
  68.  move.l xxp_AcWind(a4),a5  ;a1 = window's rastport
  69.  move.l xxp_WPort(a5),a1
  70.  
  71.  moveq #0,d0               ;from 0,0 to top left
  72.  moveq #0,d1
  73.  moveq #0,d2
  74.  move.w xxp_LeftEdge(a5),d2
  75.  moveq #0,d3
  76.  move.w xxp_TopEdge(a5),d3
  77.  
  78.  moveq #0,d4               ;greater of bmap width, window width to d4
  79.  move.w (a2),d4
  80.  lsl.w #3,d4
  81.  cmp.w xxp_PWidth(a5),d4
  82.  bcs.s Bl_xlim
  83.  move.w xxp_PWidth(a5),d4
  84. Bl_xlim:
  85.  
  86.  moveq #0,d5               ;greater of bmap height, window height to d5
  87.  move.w 2(a2),d5
  88.  cmp.w xxp_PHeight(a5),d5
  89.  bcs.s Bl_ylim
  90.  move.w xxp_PHeight(a5),d5 ;trim to fit window
  91. Bl_ylim:
  92.  
  93.  move.l #$C0,d6            ;minterm: $C0=vanilla
  94.  jsr _LVOClipBlit(a6)      ;do the blit
  95.  rts
  96.